package com.cloudz.iptv;

import android.content.Context;
import android.support.multidex.MultiDex;
import android.support.multidex.MultiDexApplication;

import com.cloudz.iptv.player.base.exo.MyExoMediaPlayer;
import com.cloudz.iptv.player.base.ijkplayer.MyIjkPlayer;
import com.hjq.toast.ToastUtils;
import com.hjq.toast.style.ToastQQStyle;
import com.kk.taurus.playerbase.config.PlayerConfig;
import com.kk.taurus.playerbase.config.PlayerLibrary;
import com.kk.taurus.playerbase.entity.DecoderPlan;
import com.kk.taurus.playerbase.player.SysMediaPlayer;
import com.squareup.leakcanary.LeakCanary;
import com.squareup.leakcanary.RefWatcher;
import com.tencent.stat.StatService;

import cn.jpush.android.api.JPushInterface;
import me.jessyan.autosize.AutoSizeConfig;
import me.jessyan.autosize.unit.Subunits;


public class App extends MultiDexApplication
{
    private static App instance;

    final static float DESIGN_WIDTH = 1280; //绘制页面时参照的设计图宽度

    private RefWatcher refWatcher;

    public static boolean ignoreMobile;

    public static final int PLAN_ID_IJK = 1;
    public static final int PLAN_ID_EXO = 2;
    public static final int PLAN_ID_DEF = 3;


    @Override
    public void onCreate()
    {
        super.onCreate();

        instance = this;

        AutoSizeConfig.getInstance().getUnitsManager().setSupportSubunits(Subunits.PT);

        ToastUtils.init(this);

        ToastUtils.initStyle(new ToastQQStyle());

        //initVideo();

        initUpdate();

        refWatcher = setupLeakCanary();

        initMta();

        // 初始化推送
        initPush();

        initPlayerBase();

    }

    @Override
    public void onTerminate()
    {
        super.onTerminate();
    }

    @Override
    protected void attachBaseContext(Context base)
    {
        super.attachBaseContext(base);

        MultiDex.install(this);
    }

    public static App get()
    {
        return instance;
    }


    /**
     * 播放器 初始化
     */
    public void initVideo()
    {

        //EXO模式
//        PlayerFactory.setPlayManager(Exo2PlayerManager.class);
//        系统内核模式
//        PlayerFactory.setPlayManager(SystemPlayerManager.class);

//        ijk内核，默认模式
//        PlayerFactory.setPlayManager(IjkPlayerManager.class);

//        全屏拉伸显示，使用这个属性时，surface_container建议使用FrameLayout
//        GSYVideoType.setShowType(GSYVideoType.SCREEN_MATCH_FULL);

//        GSYVideoType.enableMediaCodec();

//        渲染
//        默认TextureView
//        GSYVideoType.setRenderType(GSYVideoType.TEXTURE);
//        SurfaceView，动画切换等时候效果比较差
//        GSYVideoType.setRenderType(GSYVideoType.SUFRACE);

//        GLSurfaceView、支持滤镜
//        GSYVideoType.setRenderType(GSYVideoType.GLSURFACE);
    }

    /**
     * 初始化PlayerBase播放器
     */
    public void initPlayerBase()
    {

        //如果您想使用默认的网络状态事件生产者，请添加此行配置。
        //并需要添加权限 android.permission.ACCESS_NETWORK_STATE
        PlayerConfig.setUseDefaultNetworkEventProducer(true);


        PlayerConfig.addDecoderPlan(new DecoderPlan(PLAN_ID_DEF, SysMediaPlayer.class.getName(), "SysMediaPlayer"));
        PlayerConfig.addDecoderPlan(new DecoderPlan(PLAN_ID_IJK, MyIjkPlayer.class.getName(), "IjkPlayer"));
        PlayerConfig.addDecoderPlan(new DecoderPlan(PLAN_ID_EXO, MyExoMediaPlayer.class.getName(), "ExoPlayer"));
        PlayerConfig.setDefaultPlanId(PLAN_ID_EXO);

        //初始化库
        PlayerLibrary.init(this);
    }

    /**
     * 自动更新,参数初始化
     */
    public void initUpdate()
    {

//        XUpdate.get()
//                .debug(true)
//                .isWifiOnly(true)     //默认设置只在wifi下检查版本更新
//                .isGet(true)          //默认设置使用get请求检查版本
//                .isAutoMode(false)    //默认设置非自动模式，可根据具体使用配置
//                .param("versionCode", UpdateUtils.getVersionCode(this)) //设置默认公共请求参数
//                .setOnUpdateFailureListener(new OnUpdateFailureListener()
//                { //设置版本更新出错的监听
//                    @Override
//                    public void onFailure(UpdateError error)
//                    {
//                        ToastUtils.show(error.toString());
//                    }
//                })
//                .setIUpdateHttpService(new OKHttpUpdateHttpService(this)) //这个必须设置！实现网络请求功能。
//                .init(this);   //这个必须初始化
//
//        XUpdate.get().setILogger(new ILogger()
//        {
//            @Override
//            public void log(int priority, String tag, String message, Throwable t)
//            {
//                //实现日志记录功能
//            }
//        });
    }

    /**
     * 内存分析
     *
     * @return
     */
    private RefWatcher setupLeakCanary()
    {
        if (LeakCanary.isInAnalyzerProcess(this))
        {
            return RefWatcher.DISABLED;
        }
        return LeakCanary.install(this);
    }

    public static RefWatcher getRefWatcher(Context context)
    {
        App leakApplication = (App) context.getApplicationContext();
        return leakApplication.refWatcher;
    }

    /**
     * 初始化腾讯移动分析
     */
    public void initMta()
    {
        // 基础统计API
        StatService.registerActivityLifecycleCallbacks(this);
    }

    /**
     * 初始化激光推送
     */
    public void initPush()
    {
        // 设置开启日志,发布时请关闭日志
        JPushInterface.setDebugMode(false);
        // 初始化 JPush
        JPushInterface.init(this);
    }

}
